<?php
// +----------------------------------------------------------------------------
// | Tke团队版权所属 [三十年河东三十年河西,莫欺少年穷.!]
// +----------------------------------------------------------------------------
// | Copyright (c) 2014 http://www.itdaodan.com All rights reserved.
// +----------------------------------------------------------------------------
// | Author: fzh<fanzhaohai@hrbjjhh.com>
// +----------------------------------------------------------------------------

namespace Admin\Model;
use Admin\Model\BaseModel;
/**
 * 店铺商品
 */
class ShopGoodsModel extends BaseModel {

    /* 自动验证规则 */
    protected $_validate = array(
        array('merchant_id', 'isMerchant', '请选择商户', self::MUST_VALIDATE, 'function', self::MODEL_BOTH),
        array('shop_id', 'isShop', '请选择店铺', self::MUST_VALIDATE, 'function', self::MODEL_BOTH),
        array('goods_category_pid', 'isGoodsCategory', '请选择一级品类', self::MUST_VALIDATE, 'function', self::MODEL_BOTH),
        array('goods_category_id', 'isGoodsCategory', '请选择二级品类', self::MUST_VALIDATE, 'function', self::MODEL_BOTH),
        array('goods_name', 'require', '请填写商品名称', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('goods_name', '1,50', '商品名称长度不能超过50个字符', self::MUST_VALIDATE, 'length', self::MODEL_BOTH),
        array('goods_title', 'require', '商品副标题必须填写', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('goods_title', '1,70', '商品副标题长度不能超过70个字符', self::MUST_VALIDATE, 'length', self::MODEL_BOTH),
        array('market_price', 'require', '市场价格必须填写', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('market_price', 'double', '市场价格必须是大于0的数字', self::VALUE_VALIDATE, '', self::MODEL_BOTH),
        array('shop_price', 'require', '商城价格必须填写', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('shop_price', 'double', '商城价格必须是大于0的数字', self::VALUE_VALIDATE, '', self::MODEL_BOTH),
        array('goods_unit', 'require', '单位必须填写', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('goods_unit', '1,3', '单位的长度不能超过3个字符', self::MUST_VALIDATE, 'length', self::MODEL_BOTH),
        array('goods_stock', 'number', '库存必须是大于0的数字', self::MUST_VALIDATE, '', self::MODEL_BOTH),
        array('goods_deposit', 'require', '定金必须填写', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('goods_deposit', 'double', '定金必须是大于0的数字', self::MUST_VALIDATE, '', self::MODEL_BOTH),
        array('goods_introduction', '1,100', '商品简介长度不能超过100个字符', self::VALUE_VALIDATE, 'length', self::MODEL_BOTH),
        array('goods_content', 'require', '商品介绍必须填写', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('pic_id', 'gtNumber', '请上传图片', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH),
        array('sort', 'number', '排序必须是数字', self::MUST_VALIDATE, '', self::MODEL_BOTH),
    );
    /* 自动完成规则 */
    protected $_auto = array(
        array('member_id', 'getUid', self::MODEL_INSERT, 'callback'),
        array('create_time', 'time', self::MODEL_INSERT, 'function'),
        array('update_time', 'time', self::MODEL_BOTH, 'function'),
        array('status', '0', self::MODEL_INSERT),
    );
    
    
    /**
     * @todo 验证大于0的数字
     */
    public function gtNumber($pic_id){
        $pic_id = (int)$pic_id;
        if($pic_id <= 0){
            return false;
        }
    
    }
    
    /**
     * @todo 返回主键
     * @see \Think\Model::getPk()
     */
    public function getPk(){
        return 'goods_id';
    }
    
    /**
     * @todo 编辑商品标签
     */
    public function saveGoodsTags($goods_id,$tags_id = array()){
        $goods_id = (int)$goods_id;
        if($goods_id == 0){
            $this->error = '商品id错误';
            return false;
        }
        //处理二维数组，转换成一维数组，插入标签表
        $data=array();
        if(is_array($tags_id) && count($tags_id)>0){
            
            foreach ($tags_id as $val){
                if((int)$val>0){
                    $data[]=array(
                        'goods_id'=>$goods_id,
                        'tags_id'=>$val
                    );
                }
            }
        }
        //先删标签
        $shop_goods_tags = M('ShopGoodsTags');
        $shop_goods_tags->where(array('goods_id'=>$goods_id))->delete();
        //如果选择了标签才添加
        if(!empty($data)){
            $shop_goods_tags->addAll($data);
        }
    }
    
    /**
     * @todo 上架下架，促销，推荐 字段值编辑
     * @param $ids 要操作的数据id
     * @param $field 要操作的字段
     * @param $value 字段的值
     */
    public function setGoodsStatus($ids,$field,$value){
        
        if(!in_array($value,array('-1','0','1','2'))){
            $this->error = '参数错误：value';
            return false;
        }
        
        if(!in_array($field,array('status','goods_recommend'))){
            $this->error = '参数错误：field';
        }
        
        if(empty($ids)){
            $this->error = '请选择要操作的数据';
            return false;
        }
        
        $map['goods_id'] = array('in',$ids);
        $data[$field] = $value;
        $data['update_time'] = NOW_TIME;
        if($value == '-1'){
            $map['goods_type'] = 0;//正常类型商品
        }
        $id = $this->where($map)->save($data);
        if(false === $id){
            $this->error='操作失败';
            return false;
        }else{
            return $id;
        }
    }
    
    /**
     * @todo 上架下架，促销，推荐 字段值编辑
     * @param $ids 要操作的数据id
     * @param $value 字段的值
     */
    public function delPromotion($ids){
        if(empty($ids)){
            $this->error = '请选择要操作的数据';
        }
    
        //删除促销的时候， 需要把促销商品设置为正常商品
        $data = array('goods_type'=>0,'update'=>NOW_TIME);
        $map = array('goods_id'=>array('in',$ids),'goods_type'=>1);
        $id = $this->where($map)->save($data);
        if(false === $id){
            $this->error='操作失败';
            return false;
        }else{
            //直接删除促销
            $shop_goods_promotion = M('ShopGoodsPromotion');
            $id = $shop_goods_promotion->where($map)->delete();
            if(false === $id){
                $this->error='操作失败';
                return false;
            }
            //删除促销缓存
            S('sys_goods_promotion_list', null);
        }
        return $id;
        
    }
    
    /**
     * @todo 获取商品的选中标签id
     * @param $goods_id 商品id
     * @param $value 字段的值
     */
    public function getGoodsTags($goods_id){
        $goods_id = (int)$goods_id;
        if($goods_id == 0){
            return array();
        }
        $shop_goods_tags = M('ShopGoodsTags')->field('tags_id')->where(array('goods_id'=>$goods_id))->select();
        if(!empty($shop_goods_tags)){
            return array_column($shop_goods_tags, 'tags_id');
        }else{
            return array();
        }
    }
    
    /**
     * update方法 
     */
    public function update(){
       
        /* 获取数据对象 */
        $_POST['position'] = $this->getPosition();
        $data = $this->create($_POST);
        
        if(empty($data)){
            $this->error =$this->getError();
            return false;
        }
        /* 添加或新增活动配置 */
        if(empty($data[$this->getPk()])){ //新增数据
            $id = $this->add(); //添加活动配置
            if(!$id){
                $this->error = '新增出错！';
                return false;
            }
        } else { //更新数据
            $id = $this->save(); //更新活动配置
            if(false === $id){
                $this->error = '更新出错！';
                return false;
            }
        }
        return $id;
    }
    
    /**
     * 查询位置
     * @param  string  $field  字段
     * @param  int $limit   获取条数
     * @param  string $order   排序
     * @param int     $pos    位置
     * @param int     $status   -1 删除 0 未上架 1 上架 2 下架
     * @return array()
     * @author PHP@妖孽 <dino_ma@163.com>
     */
    public function getGoodsPositionList($field = true,$limit = 0, $order = 'sort desc, goods_id desc',$pos = 1, $status=1){
        $limit = (int)$limit;
        $pos = (int)$pos;
        $map = $this->listMap($pos);
        if($limit>0){
            return $this->where($map)->field($field)->order($order)->limit($limit)->select();
        }else{
            return $this->where($map)->field($field)->order($order)->select();
        }
    }
    
    /**
     * 设置where查询条件
     * @param  number  $pos      推荐位 1天天特卖推荐 2 暂留 4 暂存
     * @param  integer $status   状态
     * @return array             查询条件
     * @author PHP@妖孽 <dino_ma@163.com>
     */
    public function listMap( $pos = null,$status = 1){
        /* 设置状态 */
        if($status == -1){
            $map = array('status' => array('gt',-1));
        }else{
            $map = array('status' =>$status);
        }
//         $map = array('status' => array('gt',-1));
        /* 设置推荐位 */
        if(is_numeric($pos)){
            $map[] = "position & {$pos} = {$pos}";
        }
    
        return $map;
    }
    
    /**
     * 生成推荐位的值
     * @return number 推荐位
     * @author PHP@妖孽 <dino_ma@163.com>
     */
    protected function getPosition(){
        $position = I('post.position');
        if(!is_array($position)){
            return 0;
        }else{
            $pos = 0;
            foreach ($position as $key=>$value){
                $pos += $value;		//将各个推荐位的值相加
            }
            return $pos;
        }
    }
}